import time

import requests
# 导入一个以表格输出的库
import prettytable as pt
import json
import time
# 导入元素交互库
from selenium import webdriver
# 密码文件单独放
from password import Password, account, Id
from selenium.webdriver.common.keys import Keys

# 查票 需要有city的json文件
start_city = input("输入出发城市: ")
end_city = input("输入目的城市: ")
date = input("输入出发时间: ")

# 第一遍先查一下你要的车次 然后再将下方代码解除注释
tran_number = input("请输入你要的车次: ")

# 读取城市json文件 我只写了一部分 有需要再补上相应的火车站的键值对
f = open('city.json', encoding='utf-8')
# 数据容器转换
city_json = json.loads(f.read())
print(city_json)
# 出发城市
from_station = city_json[start_city]  # 字典取值
# 目的城市
to_station = city_json[end_city]
print(from_station, to_station)

# 确定请求地址 先选择你要的车票 然后再检查里面ctrl+f 搜索你要的车票对应的车次——如G1023 再将对应的UA和cookie什么的写进来
# 格式化字符串    这里的date（格式如：2024-05-12) 等和上面输入项对应
url = f'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT'
# 模拟浏览器
headers = {
    # 12306的反爬特别多，要小心
    'Cookie': '_uab_collina=171595104445956463235332; JSESSIONID=B43E67A7F5E60B998926C62505985059; tk=LJojx_zov_u2KMrVtqI7m_4x3fz4y-cHCXNiawbcn1n0; route=c5c62a339e7744272a54643b3be5bf64; BIGipServerotn=2229797130.50210.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u957F%u6C99%u5357%2CCWQ; _jc_save_toStation=%u5E7F%u5DDE%u5357%2CIZQ; _jc_save_fromDate=2024-05-18; _jc_save_toDate=2024-05-17; _jc_save_wfdc_flag=dc; BIGipServerpassport=904397066.50215.0000; uKey=69e49f13f79df4cbf0bef927ae271d60e076bd90232561458c8e48ff9fb460ed',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'

}
# 注意要学会自己分析请求的数据 在请求网址-预览-data-result里面
# 发送请求
response = requests.get(url=url, headers=headers)
# 测试请求是否成功
# print(response)
# print(response.json())

# 实例化一个对象
tb = pt.PrettyTable()
# 添加表头
tb.field_names = [
    '序号',
    '出发城市',
    '到达城市',
    '车次',
    '出发时间',
    '到达时间',
    '耗时',
    '特等座',
    '一等',
    '二等',
    '软卧',
    '硬卧',
    '硬座',
    '无座',
]
# 序号
page = 0

# 解析数据
# print(response.json()['data']['result'])

for index in response.json()['data']['result']:
    # 用字符串分割将其变成相对较为清晰的数据
    # print(index.split('|'))
    info_list = index.split("|")
    num = info_list[3]  # 设置索引为车次
    start_time = info_list[8]  # 出发时间
    end_time = info_list[9]  # 到达时间
    use_time = info_list[10]  # 耗时
    topGrade = info_list[25]  # 特等座

    if topGrade:
        pass
    else:
        topGrade = info_list[32]

    first_class = info_list[31]  # 一等座位
    second_class = info_list[30]  # 二等座
    hard_sleeper = info_list[28]  # 硬卧
    hard_seat = info_list[29]  # 硬座
    no_seat = info_list[26]  # 无座
    soft_sleeper = info_list[23]  # 软卧
    dit = {
        '车次': num,
        '出发时间': start_time,
        '到达时间': end_time,
        '耗时': use_time,
        '特等座': topGrade,
        '一等': first_class,
        '二等': second_class,
        '软卧': soft_sleeper,
        '硬卧': hard_sleeper,
        '硬座': hard_seat,
        '无座': no_seat,

    }
    # 直接往tb对象里面添加数值。
    tb.add_row([
        page,
        start_city,
        end_city,
        num,
        start_time,
        end_time,
        use_time,
        topGrade,
        first_class,
        second_class,
        soft_sleeper,
        hard_sleeper,
        hard_seat,
        no_seat,
    ])
    # 先查询一遍找到你要的车次，然后解除下方代码的注释 再执行一次
    # if info_list[3] == tran_number:
    #     numbers = page
    #     print(numbers)

    page += 1
print(tb)
